'''
创建型模式
简单工厂模式：在创建一个模式的时候，不向用户暴露出对象具体实现细节，而是通过一个工厂类来负责创建产品类的实例
优点：统一参数 统一创建类的参数。隐藏了类的内部实现细节。 客户端不需要修改代码。
缺点：违反了单一职责原则，将多个创建逻辑集中到了一个工厂类中。
    添加新的产品类时，需要修改工厂类代码，违反了封闭开放原则
'''


from abc import ABCMeta, abstractmethod


class Payment(classmethod=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass


class WechatPay(Payment):
    def pay(self, money):
        print(f"微信支付 {money} 元")


class AliPay(Payment):
    def pay(self, money):
        print(f"支付宝支付 {money} 元")


class PaymentFactory():
    def create_payment(self, method):
        if method == "wechat":
            return WechatPay()
        elif method == "alipay":
            return AliPay()
        else:
            raise TypeError(f"method:{method} 不允许")